package org.minuframework.common;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 米mi
 * @param  <T> mybatis实体映射类
 */
public interface BaseMapper<T> {
    
    /**
     * 添加一条记录
     * @param  entity    实体对象
     * @return           boolean
     * @throws Exception
     */
    boolean insert(T entity);
    
    /**
     * 添加一条记录
     * @param  params    map参数
     * @return           boolean
     * @throws Exception
     */
    boolean insertByMap(Map<String, Object> params);
    
    /**
     * 批量添加
     * @param  entitys   实体对象列表
     * @return           boolean
     * @throws Exception
     */
    boolean insertBatch(List<T> list);
    
    /**
     * 批量添加
     * @param  params    map参数
     * @return           boolean
     * @throws Exception
     */
    boolean insertBatchByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 修改一条记录
     * @param  entity    实体对象
     * @return           boolean
     * @throws Exception
     */
    boolean update(T entity);
    
    /**
     * 修改一条记录
     * @param  params    实体 map
     * @return           boolean
     * @throws Exception
     */
    boolean updateByMap(Map<String, Object> params);
    
    /**
     * 批量修改
     * @param  entitys   实体对象列表
     * @return           boolean
     * @throws Exception
     */
    boolean updateBatch(List<T> list);
    
    /**
     * 批量修改
     * @param  params    map参数
     * @return           boolean
     * @throws Exception
     */
    boolean updateBatchByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 删除一条记录
     * @param  id        实体id
     * @return           boolean
     * @throws Exception
     */
    boolean deleteById(Serializable id);
    
    /**
     * 删除一条记录
     * @param  entity    实体对象
     * @return           boolean
     * @throws Exception
     */
    boolean delete(T entity);
    
    /**
     * 删除一条记录
     * @param  params    map参数
     * @return           boolean
     * @throws Exception
     */
    boolean deleteByMap(Map<String, Object> params);
    
    /**
     * 批量删除
     * @param  collection 实体参数列表
     * @return            boolean
     * @throws Exception
     */
    boolean deleteBatch(Collection<? extends Serializable> list);
    
    /**
     * 批量删除
     * @param  params    map参数
     * @return           boolean
     * @throws Exception
     */
    boolean deleteBatchByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 查询总记录数
     * @param  id        实体id
     * @return           int
     * @throws Exception
     */
    int selectCountById(Serializable id);
    
    /**
     * 查询总记录数
     * @param  entity    实体对象
     * @return           int
     * @throws Exception
     */
    int selectCount(T entity);
    
    /**
     * 查询不重复的总记录数
     * @param  entity    实体对象
     * @return           int
     * @throws Exception
     */
    int selectCountDistinct(T entity);
    
    /**
     * 查询总记录数
     * @param  params    map参数
     * @return           int
     * @throws Exception
     */
    int selectCountByMap(Map<String, Object> params);
    
    /**
     * 查询不重复的总记录数
     * @param  params    map参数
     * @return           int
     * @throws Exception
     */
    int selectCountDistinctByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 查询一条记录
     * @param  id        实体id
     * @return           T
     * @throws Exception
     */
    T selectById(Serializable id);
    
    /**
     * 查询一条记录
     * @param  entity    实体对象
     * @return           T
     * @throws Exception
     */
    T select(T entity);
    
    /**
     * 查询一条记录
     * @param  params    map参数
     * @return           T
     * @throws Exception
     */
    T selectByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 查询一条记录
     * @param  id        实体id
     * @return           T
     * @throws Exception
     */
    HashMap<String, Object> selectMapById(Serializable id);
    
    /**
     * 查询一条记录
     * @param  entity    实体对象
     * @return           Object
     * @throws Exception
     */
    HashMap<String, Object> selectMap(T entity);
    
    /**
     * 查询一条记录
     * @param  params    map参数
     * @return           Object
     * @throws Exception
     */
    HashMap<String, Object> selectMapByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 批量查询
     * @param  id        实体id
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectListById(Serializable id);
    
    /**
     * 批量查询（不重复）
     * @param  id        实体id
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectListDistinctById(Serializable id);
    
    /**
     * 批量查询
     * @param  entity    实体对象
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectList(T entity);
    
    /**
     * 批量查询（不重复）
     * @param  entity    实体对象
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectListDistinct(T entity);
    
    /**
     * 批量查询
     * @param  params    map参数
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectListByMap(Map<String, Object> params);
    
    /**
     * 批量查询（不重复）
     * @param  params    map参数
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectListDistinctByMap(Map<String, Object> params);
    
    /**
     * 批量查询
     * @param  collection 实体参数列表
     * @return            List<T>
     * @throws Exception
     */
    List<T> selectListBatch(Collection<? extends Serializable> list);
    
    /**
     * 批量查询（不重复）
     * @param  collection 实体参数列表
     * @return            List<T>
     * @throws Exception
     */
    List<T> selectListBatchDistinct(Collection<? extends Serializable> list);
    
    /**
     * 批量查询
     * @param  params    map参数
     * @return           List<T>
     * @throws Exception
     */
    List<T> selectListBatchByMap(Map<String, Object> params);
    
    // ------------------------------------------------------------------------
    
    // ------------------------------------------------------------------------
    
    /**
     * 批量查询
     * @param  id        实体id
     * @return           List<T>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsById(Serializable id);
    
    /**
     * 批量查询（不重复）
     * @param  id        实体id
     * @return           List<T>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsDistinctById(Serializable id);
    
    /**
     * 批量查询
     * @param  entity    实体对象
     * @return           List<T>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMaps(T entity);
    
    /**
     * 批量查询（不重复）
     * @param  entity    实体对象
     * @return           List<T>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsDistinct(T entity);
    
    /**
     * 批量查询
     * @param  params    map参数
     * @return           List<Map<String, Object>>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsByMap(Map<String, Object> params);
    
    /**
     * 批量查询（不重复）
     * @param  params    map参数
     * @return           List<Map<String, Object>>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsDistinctByMap(Map<String, Object> params);
    
    /**
     * 批量查询
     * @param  collection 实体参数列表
     * @return            List<Map<String, Object>>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsBatch(Collection<? extends Serializable> list);
    
    /**
     * 批量查询（不重复）
     * @param  collection 实体参数列表
     * @return            List<Map<String, Object>>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsBatchDistinct(Collection<? extends Serializable> list);
    
    /**
     * 批量查询
     * @param  params    map参数列表
     * @return           List<Map<String, Object>>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsBatchByMap(Map<String, Object> params);
    
    /**
     * 批量查询（不重复）
     * @param  params    map参数列表
     * @return           List<Map<String, Object>>
     * @throws Exception
     */
    List<HashMap<String, Object>> selectMapsBatchDistinctByMap(Map<String, Object> params);
    
}
